#!/bin/bash

# 检查 git 是否安装 如果 没有安装 则安装
#dpkg -s git > /dev/null 2>&1 || (apt-get update && apt-get install -y git)
# 获取当前脚本的绝对路径
SCRIPT_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/$(basename "${BASH_SOURCE[0]}")"
SHELL_FILE_DIR=$(dirname $SCRIPT_PATH)
cd $SHELL_FILE_DIR
export GIT_PUSH_URL="git@gitcode.com:hq_make/platform_module.git"
# 配置 SSH 命令：接受新主机密钥，避免交互
export GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=accept-new -o UserKnownHostsFile=~/.ssh/known_hosts"
# 可选：预加载 gitcode.com 的 host key（更可靠）
ssh-keyscan -t rsa gitcode.com 2>/dev/null >> ~/.ssh/known_hosts 2>/dev/null || true

# Git 推送方法
function gitpush() {
  local repo_dir="$1"
  local commit_msg="$2"

  # 检查目录是否存在
  if [ ! -d "$repo_dir" ]; then
    echo "❌ 目录不存在: $repo_dir"
    return 1
  fi

  cd "$repo_dir" || return 1

  # 初始化仓库
  if [ ! -d ".git" ]; then
    echo "🚀 初始化仓库: $repo_dir"
    git config --global init.defaultBranch master
    git init

    local gitdir=$(pwd)
    git config --global --add safe.directory "$gitdir"
    git remote add origin "$GIT_PUSH_URL"

    git config --global user.name "qqgitcode"
    git config --global user.email "qqgitcode@noreply.gitcode.com"

    # 检查远程分支是否存在
    if git ls-remote --exit-code --heads origin "$repo_dir" > /dev/null 2>&1; then
      echo "🔁 远程分支 $repo_dir 存在，拉取..."
      git fetch origin "$repo_dir"
      git pull --rebase origin $1 || {
        echo "❌ 拉取失败"
        cd .. && return 1
      }
      git checkout "$repo_dir" || {
        echo "❌ 切换分支失败"
        cd .. && return 1
      }
    else
      echo "🆕 分支 $repo_dir 不存在，创建本地分支..."
      git checkout -b "$repo_dir"
      git commit --allow-empty -m "init: $commit_msg"
    fi
  fi

  # 添加所有文件
  git add .

  # 检查是否有变更
  if ! git diff-index --quiet HEAD --; then
    echo "📝 提交更改: $commit_msg"
    git commit -m "$commit_msg"
  else
    echo "✅ 无更改需要提交"
  fi

  # ======== 拉取远程更新并自动解决冲突（接受本地版本）========
  echo "📡 检查远程更新..."
  git fetch origin "$repo_dir" 2>/dev/null || echo "⚠️ fetch 失败，可能分支不存在"

  # 判断是否需要 rebase
  if ! git diff --quiet HEAD "origin/$repo_dir" 2>/dev/null; then
    echo "🔄 存在远程更新，开始 rebase..."

    # 启动 rebase
    if ! git rebase "origin/$repo_dir"; then
      echo "💥 检测到冲突，自动解决：接受本地更改"

      # 自动选择本地版本（ours）
      git checkout --ours .  # 保留本地文件
      git add .              # 标记解决

      # 继续 rebase
      if git rebase --continue; then
        echo "✅ rebase 完成"
      else
        echo "❌ rebase --continue 失败，请检查"
        git rebase --abort
        cd .. && return 1
      fi
    fi
  fi

  # 推送
  echo "📤 推送 $repo_dir 分支..."
  git push -u origin "$repo_dir"

  if [ $? -eq 0 ]; then
    echo "✅ Git 推送 $repo_dir 成功"
  else
    echo "❌ Git 推送 $repo_dir 失败"
    cd .. && return 1
  fi

  cd ..
}

# Git 拉取方法
function gitpull() {
  local repo_dir="$1"

  if [ ! -d "$repo_dir" ]; then
    mkdir -p "$repo_dir"
    echo "📁 创建目录: $repo_dir"
  fi

  cd "$repo_dir" || return 1

  if [ ! -d ".git" ]; then
    echo "📥 初始化并克隆 $repo_dir 分支..."
    git init
    local gitdir=$(pwd)
    git config --global --add safe.directory "$gitdir"
    git remote add origin "$GIT_PUSH_URL"

    git config --global user.name "qqgitcode"
    git config --global user.email "qqgitcode@noreply.gitcode.com"

    # 创建并切换到分支
    git checkout -b "$repo_dir"
  fi

  # 拉取
  echo "⬇️ 拉取 origin $repo_dir"
  git pull origin "$repo_dir"

  if [ $? -eq 0 ]; then
    echo "✅ git 拉取 $repo_dir 成功"
  else
    echo "❌ git 拉取 $repo_dir 失败"
    cd .. && return 1
  fi

  cd ..
}




